package org.example;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/*
* 1,给定一个计算器Calculator接口,内含抽象方法calc(减法),其功能是可以将两个数字进行相减,并返回差值。
使用Lambda表达式完成调用

2.定义一个函数式接口IntCalc,其中抽象方法int calc(int a , int b)，使用注解@FunctionalInterface
在测试类中定义static void getProduct(int a , int b ,IntCalc calc), 该方法的预期行为是使用calc得到a和b的乘积并打印结果
测试getProduct(),通过lambda表达式完成需求

3,现在有两个 ArrayList 集合存储队伍当中的多个成员姓名,要求使用Stream方式进行以下若干操作步骤:
(1). 第一个队伍只要名字为3个字的成员姓名;
(2). 第一个队伍筛选之后只要前6个人;
(3). 第二个队伍只要姓张的成员姓名;
(4). 第二个队伍筛选之后不要前1个人;
(5). 将两个队伍合并为一个队伍;
(6). 根据姓名创建Student对象;
(7). 打印整个队伍的Student对象信息。

第一个队伍的成员是:陈玄风,梅超风,陆乘风,曲灵风,武眠风,冯默风,罗玉风
第二个队伍的成员是:宋远桥,俞莲舟,俞岱岩,张松溪,张翠山,殷梨亭,莫声谷
* */
public class Main {
    public static void main(String[] args) {
        Calculator subtract = (a,b)->a-b;
        int result = subtract.calc(10,5);
        System.out.println("Subtraction result : "+result);

        getProduct(5,3,(a,b)->a*b);
        List<String> team1 = Arrays.asList("陈玄风", "梅超风", "陆乘风", "曲灵风", "武眠风", "冯默风", "罗玉风");
        List<String> team2 = Arrays.asList("宋远桥", "俞莲舟", "俞岱岩", "张松溪", "张翠山", "殷梨亭", "莫声谷");
        List<String>resultTeam = Stream.concat(
                team1.stream()
                        .filter(name->name.length() == 3)
                        .limit(6),
                team2.stream().filter(name->name.startsWith("张")).skip(1))
                        .collect(Collectors.toList());

                List<Student> students = resultTeam.stream().map(Student::new)
                        .collect(Collectors.toList());
                students.forEach(System.out::println);

    }
    static void getProduct(int a,int b,IntCalc calc){
        int result = calc.calc(a,b);
        System.out.println("Product result :"+result);
    }
}